﻿''' <summary>
''' Fichero que contiene la clase Campeonato para gestionar todo el programa.
''' </summary>
''' <author>Juan David Cabezuelo, Arturo Sirvent, Fermín Martínez, Eugenio Cañete y Pablo Vicedo</author>

Public Class Campeonato

    Private _miBD As BaseDatos

    Public Sub New()
        Me._miBD = New BaseDatos()
    End Sub

    ''' <summary>
    ''' Función para buscar usuarios y que los muestre en un ListBox.
    ''' </summary>
    ''' <param name="criterio"></param>
    ''' <returns> Devuelve el resultado de las select. </returns>
    ''' <remarks></remarks>
    Public Function buscarJugador(ByVal criterio As String) As List(Of String)
        Dim resultadoBusqueda = New List(Of String)
        Dim datosFormateados As String = ""
        Dim datosSinFormato() As String = New String(14) {}
        Dim _resultadoBusqueda = New List(Of String)

        If criterio = "" Then
            resultadoBusqueda = _miBD.Consultar("Select * from Jugadores", "Jugadores")
        Else
            resultadoBusqueda = _miBD.Consultar("Select * from jugadores where NIF LIKE '%" & FormBuscarJugadores.TbxBuscarBuscar.Text & "%'" & _
                                               " Or Nombre LIKE '%" & FormBuscarJugadores.TbxBuscarBuscar.Text & "%'" & _
                                               " Or Apellidos LIKE '%" & FormBuscarJugadores.TbxBuscarBuscar.Text & "%'" & _
                                               " Or Calle LIKE '%" & FormBuscarJugadores.TbxBuscarBuscar.Text & "%'" & _
                                               " Or Puerta LIKE '%" & FormBuscarJugadores.TbxBuscarBuscar.Text & "%'" & _
                                               " Or Localidad LIKE '%" & FormBuscarJugadores.TbxBuscarBuscar.Text & "%'" & _
                                               " Or Provincia LIKE '%" & FormBuscarJugadores.TbxBuscarBuscar.Text & "%'" & _
                                               " Or CorreoElectronico LIKE '%" & FormBuscarJugadores.TbxBuscarBuscar.Text & "%'" & _
                                               " Or Facebook LIKE '%" & FormBuscarJugadores.TbxBuscarBuscar.Text & "%'" & _
                                               " Or Twitter LIKE '%" & FormBuscarJugadores.TbxBuscarBuscar.Text & "%'" & ";", "Jugadores")
        End If

        'muestro el numero de resultados
        FormBuscarJugadores.Label1.Text = "Se han encontrado " & resultadoBusqueda.Count & " resultados"
        For Each n As String In resultadoBusqueda
            'en en form buscar muestro los datos que considero necesarios
            datosSinFormato = n.Split(CChar("-"))
            datosFormateados &= datosSinFormato(0) & " "
            datosFormateados &= datosSinFormato(1) & " "
            datosFormateados &= datosSinFormato(2) & " "
            datosFormateados &= datosSinFormato(7) & " "
            datosFormateados &= datosSinFormato(8) & " "
            datosFormateados &= datosSinFormato(9) & " "
            FormBuscarJugadores.ListBoxBuscar.Items.Add(datosFormateados)
            datosFormateados = "" 'limpio la cadena para no duplicar datos
        Next
        Return resultadoBusqueda
    End Function

    ''' <summary>
    ''' Subproceso encargado de insertar los valores de los jugadores.
    ''' </summary>
    ''' <param name="nif"></param>
    ''' <param name="nombre"></param>
    ''' <param name="apellidos"></param>
    ''' <param name="fechaNacimiento"></param>
    ''' <param name="calle"></param>
    ''' <param name="numero"></param>
    ''' <param name="puerta"></param>
    ''' <param name="localidad"></param>
    ''' <param name="provincia"></param>
    ''' <param name="email"></param>
    ''' <param name="whatsapp"></param>
    ''' <param name="facebook"></param>
    ''' <param name="twiter"></param>
    ''' <remarks></remarks>
    Public Sub insertarJugador(ByVal nif As String, ByVal nombre As String, ByVal apellidos As String, _
                               ByVal fechaNacimiento As Date, ByVal calle As String, ByVal numero As Integer, _
                               ByVal puerta As String, ByVal localidad As String, ByVal provincia As String, _
                               ByVal email As String, ByVal whatsapp As Integer, ByVal facebook As String, _
                               ByVal twiter As String)
        Dim jugador As Jugador
        Try
            jugador = New Jugador(nif, nombre, apellidos, fechaNacimiento, calle, numero, puerta, localidad, _
                                  provincia, email, whatsapp, facebook, twiter)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

    End Sub

    ''' <summary>
    ''' Subproceso que se encarga de modificar los datos de los jugadores.
    ''' </summary>
    ''' <param name="nif"></param>
    ''' <param name="nombre"></param>
    ''' <param name="apellidos"></param>
    ''' <param name="fechaNacimiento"></param>
    ''' <param name="calle"></param>
    ''' <param name="numero"></param>
    ''' <param name="puerta"></param>
    ''' <param name="localidad"></param>
    ''' <param name="provincia"></param>
    ''' <param name="email"></param>
    ''' <param name="whatsapp"></param>
    ''' <param name="facebook"></param>
    ''' <param name="twiter"></param>
    ''' <param name="id"></param>
    ''' <remarks></remarks>
    Public Sub actualizarJugador(ByVal nif As String, ByVal nombre As String, ByVal apellidos As String, _
                               ByVal fechaNacimiento As Date, ByVal calle As String, ByVal numero As Integer, _
                               ByVal puerta As String, ByVal localidad As String, ByVal provincia As String, _
                               ByVal email As String, ByVal whatsapp As Integer, ByVal facebook As String, _
                               ByVal twiter As String, ByVal id As Integer)

        Dim jugador As Jugador
        Try
            jugador = New Jugador()
            jugador.Actualizar(nif, nombre, apellidos, fechaNacimiento, calle, numero, puerta, localidad, provincia, _
                               email, whatsapp, facebook, twiter, id)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    ''' <summary>
    ''' Subproceso encargada de la eliminación de los usuarios.
    ''' </summary>
    ''' <param name="nif"></param>
    ''' <param name="nombre"></param>
    ''' <param name="apellidos"></param>
    ''' <param name="id"></param>
    ''' <remarks></remarks>
    Public Sub eliminarJugador(ByVal nif As String, ByVal nombre As String, ByVal apellidos As String, _
                               ByVal id As Integer)
        Dim jugador As Jugador
        Try
            jugador = New Jugador()
            jugador.Eliminar(nif, nombre, apellidos, id)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    ''' <summary>
    ''' Función encargada de buscar a los equipos y mostrarlos en un ListBox.
    ''' </summary>
    ''' <returns>Devuelve el resultado de la select de equipos. </returns>
    ''' <remarks></remarks>
    Public Function buscarEquipos() As List(Of String)
        Dim resultadoBusqueda = New List(Of String)
        Dim datosFormateados As String = ""
        Dim datosSinFormato() As String = New String(14) {}

        If FormBuscarEquipo.tbxBuscarEquipos.Text = "" Then
            resultadoBusqueda = _miBD.Consultar("Select * from Equipos", "Equipos")
        Else
            resultadoBusqueda = _miBD.Consultar("Select * from Equipos where NombreEquipo LIKE '%" & FormBuscarEquipo.tbxBuscarEquipos.Text & "%';", "Equipos")
        End If
        'muestro el numero de resultados
        FormBuscarEquipo.Label1.Text = "Se han encontrado " & resultadoBusqueda.Count & " resultados"
        For Each n As String In resultadoBusqueda
            'en el form buscar muestro los datos que considero necesarios
            datosSinFormato = n.Split(CChar("-"))
            datosFormateados &= datosSinFormato(0) & " "
            FormBuscarEquipo.ListBoxEquipos.Items.Add(datosFormateados)
            datosFormateados = "" 'limpio la cadena para no duplicar datos
        Next
        Return resultadoBusqueda
    End Function

    ''' <summary>
    ''' Función encargada de buscar a los equipos y mostrarlos en un CheckedBoxList.
    ''' </summary>
    ''' <returns>Devuelve el resultado de la select de equipos. </returns>
    ''' <remarks></remarks>
    Public Function buscarEquiposParaTorneos() As List(Of String)
        Dim resultadoBusqueda = New List(Of String)
        Dim datosFormateados As String = ""
        Dim datosSinFormato() As String = New String(14) {}

        resultadoBusqueda = _miBD.Consultar("Select * from Equipos", "Equipos")

        For Each n As String In resultadoBusqueda
            'en el form buscar muestro los datos que considero necesarios
            datosSinFormato = n.Split(CChar("-"))
            datosFormateados &= datosSinFormato(4) & "-" & datosSinFormato(0) & " "
            FormAnyadirEquiposTorneo.checkedBoxListaEquipos.Items.Add(datosFormateados)
            datosFormateados = "" 'limpio la cadena para no duplicar datos
        Next
        Return resultadoBusqueda
    End Function

    ''' <summary>
    ''' Subproceso encargada de la inserción de los datos en equipos.
    ''' </summary>
    ''' <param name="nombreEquipo"></param>
    ''' <param name="idJugadorCapitan"></param>
    ''' <param name="idJugadorNormal"></param>
    ''' <remarks></remarks>
    Public Sub insertarEquipo(ByVal nombreEquipo As String, ByVal idJugadorCapitan As Integer, ByVal idJugadorNormal As Integer)
        Dim equipo As Equipo
        Try
            equipo = New Equipo(nombreEquipo, idJugadorCapitan, idJugadorNormal)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    ''' <summary>
    ''' Subproceso encargada de la actualización de los datos de equipos.
    ''' </summary>
    ''' <param name="nombreEquipo"></param>
    ''' <param name="idJugador1"></param>
    ''' <param name="idJugador2"></param>
    ''' <param name="id"></param>
    ''' <param name="idAnterior1"></param>
    ''' <param name="idAnterior2"></param>
    ''' <remarks></remarks>
    Public Sub actualizarEquipo(ByVal nombreEquipo As String, ByVal idJugador1 As Integer, ByVal idJugador2 As Integer _
                                , ByVal id As Integer, ByVal idAnterior1 As Integer, ByVal idAnterior2 As Integer)
        Dim equipo As Equipo
        Try
            equipo = New Equipo()
            equipo.Actualizar(nombreEquipo, idJugador1, idJugador2, id, idAnterior1, idAnterior2)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    ''' <summary>
    ''' Subproceso que se encarga de eliminar equipos.
    ''' </summary>
    ''' <param name="nombreEquipo"></param>
    ''' <param name="idJugador1"></param>
    ''' <param name="idJugador2"></param>
    ''' <param name="id"></param>
    ''' <remarks></remarks>
    Public Sub eliminarEquipo(ByVal nombreEquipo As String, ByVal idJugador1 As Integer, ByVal idJugador2 As Integer, ByVal id As Integer)
        Dim equipo As Equipo
        Try
            equipo = New Equipo()
            equipo.Eliminar(nombreEquipo, idJugador1, idJugador2, id)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    Public Function buscarTorneos() As List(Of String)
        Dim resultadoBusqueda = New List(Of String)
        Dim datosFormateados As String = ""
        Dim datosSinFormato() As String = New String(8) {}

        If FormBuscarTorneo.tbxBuscarTorneos.Text = "" Then
            resultadoBusqueda = _miBD.Consultar("Select * from Torneos", "Torneos")
        Else
            resultadoBusqueda = _miBD.Consultar("Select * from Torneos where Nombre LIKE '%" & FormBuscarTorneo.tbxBuscarTorneos.Text & "%';", "Torneos")
        End If
        'muestro el numero de resultados
        FormBuscarTorneo.Label1.Text = "Se han encontrado " & resultadoBusqueda.Count & " resultados"
        For Each n As String In resultadoBusqueda
            'en el form buscar muestro los datos que considero necesarios
            datosSinFormato = n.Split(CChar("-"))
            datosFormateados &= datosSinFormato(0) & "-" & datosSinFormato(1)
            FormBuscarTorneo.ListBoxTorneos.Items.Add(datosFormateados)
            datosFormateados = "" 'limpio la cadena para no duplicar datos
        Next
        Return resultadoBusqueda
    End Function

    Public Function buscarTorneosPorID(ByVal idTorneo As Integer) As String
        Dim resultadoBusqueda = New List(Of String)
        Dim datosFormateados As String = ""
        Dim datosSinFormato() As String = New String(8) {}
        Dim salida As String

        resultadoBusqueda = _miBD.Consultar("Select * from Torneos where Id = " & idTorneo & ";", "Torneos")

        datosSinFormato = resultadoBusqueda(0).Split(CChar("-"))
        salida = datosSinFormato(0)
        Return salida
    End Function

    Public Sub insertarTorneo(nombre As String, tipo As String, fechaII As Date, fechaFI As Date, fechaFT As Date, nRondas As Byte)
        Dim torneo As Torneo
        Try
            torneo = New Torneo(nombre, tipo, fechaII, fechaFI, fechaFT, nRondas)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    Public Sub eliminarTorneo(ByVal id As Integer)
        Dim torneo As Torneo
        Try
            torneo = New Torneo()
            torneo.Eliminar(id)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    Public Sub insertarEquiposAlTorneo(idCampeonato As Integer, idEquipo As Integer)
        Dim torneo As Torneo
        Try
            torneo = New Torneo()
            torneo.AnyadirEquiposAlTorneo(idCampeonato, idEquipo)
        Catch ex As Exception
            MsgBox("Error al insertar los equipos, no se pueden insertar equipos duplicados.")
        End Try
    End Sub


    ''' <summary>
    ''' Subproceso encargada de la inserción de usuarios
    ''' </summary>
    ''' <param name="nif"></param>
    ''' <param name="nombre"></param>
    ''' <param name="apellidos"></param>
    ''' <param name="telefono"></param>
    ''' <param name="usuario"></param>
    ''' <param name="contraseña"></param>
    ''' <param name="idRol"></param>
    ''' <remarks></remarks>
    Public Sub insertarUsuario(ByVal nif As String, ByVal nombre As String, ByVal apellidos As String, _
                               ByVal telefono As Integer, ByVal usuario As String, ByVal contraseña _
                               As String, ByVal idRol As Integer)
        Dim miUsuario As Usuario
        Try
            miUsuario = New Usuario(nif, nombre, apellidos, telefono, usuario, contraseña, idRol)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    ''' <summary>
    ''' Función encargada de buscar usuarios y mostrarlos en un ListBox.
    ''' </summary>
    ''' <returns>Devuelve el resultado de la select</returns>
    ''' <remarks></remarks>
    Public Function buscarUsuario() As List(Of String)
        Dim resultadoBusqueda = New List(Of String)
        Dim datosFormateados As String = ""
        Dim datosSinFormato() As String = New String(14) {}

        If FormBuscarUsuario.TbxUsuarioBuscar.Text = "" Then
            resultadoBusqueda = _miBD.Consultar("Select * from Usuarios", "Usuarios")
        Else
            resultadoBusqueda = _miBD.Consultar("Select * from Usuarios where NIF LIKE  '%" & FormBuscarUsuario.TbxUsuarioBuscar.Text & "%'" & _
                                               " Or Nombre LIKE '%" & FormBuscarUsuario.TbxUsuarioBuscar.Text & "%'" & _
                                               " Or Apellidos LIKE '%" & FormBuscarUsuario.TbxUsuarioBuscar.Text & "%'" & _
                                               " Or Usuario LIKE '%" & FormBuscarUsuario.TbxUsuarioBuscar.Text & "%'" & _
                                               " Or Contraseña LIKE '%" & FormBuscarUsuario.TbxUsuarioBuscar.Text & "%'" & ";", "Usuarios")
        End If
        'muestro el numero de resultados
        FormBuscarUsuario.Label1.Text = "Se han encontrado " & resultadoBusqueda.Count & " resultados"
        For Each n As String In resultadoBusqueda
            'en el listbox muestro los datos que considero necesarios
            datosSinFormato = n.Split(CChar("-"))
            datosFormateados &= datosSinFormato(0) & " " & datosSinFormato(1) & " " & datosSinFormato(2)
            FormBuscarUsuario.ListBoxUsuario.Items.Add(datosFormateados)
            datosFormateados = "" 'limpio la cadena para no duplicar datos
        Next
        Return resultadoBusqueda
    End Function

    ''' <summary>
    ''' Subproceso encargada de modificar los datos de los usuarios.
    ''' </summary>
    ''' <param name="nif"></param>
    ''' <param name="nombre"></param>
    ''' <param name="apellidos"></param>
    ''' <param name="telefono"></param>
    ''' <param name="usuario"></param>
    ''' <param name="contraseña"></param>
    ''' <param name="idRol"></param>
    ''' <param name="id"></param>
    ''' <remarks></remarks>
    Public Sub actualizarUsuario(ByVal nif As String, ByVal nombre As String, ByVal apellidos As String, ByVal telefono As Integer, _
                          ByVal usuario As String, ByVal contraseña As String, ByVal idRol As Integer, ByVal id As Integer)
        Dim miUsuario As Usuario
        Try
            miUsuario = New Usuario()
            miUsuario.Actualizar(nif, nombre, apellidos, telefono, usuario, contraseña, idRol, id)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    ''' <summary>
    ''' Subproceso encargada de la eliminación de usuarios.
    ''' </summary>
    ''' <param name="id"></param>
    ''' <remarks></remarks>
    Public Sub eliminarUsuario(ByVal id As Integer)
        Dim usuario As Usuario
        Try
            usuario = New Usuario()
            usuario.Eliminar(id)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    ''' <summary>
    ''' Función encargada de buscar los roles y mostrarlos en un ListBox.
    ''' </summary>
    ''' <returns>Devuelve el resultado realizado con la select</returns>
    ''' <remarks></remarks>
    Public Function buscarRol() As List(Of String)
        Dim resultadoBusqueda = New List(Of String)
        Dim datosFormateados As String = ""
        Dim datosSinFormato() As String = New String(14) {}

        If FormBuscarRol.tbxBuscarRol.Text = "" Then
            resultadoBusqueda = _miBD.Consultar("Select * from Roles", "Roles")
        Else
            resultadoBusqueda = _miBD.Consultar("Select * from Roles where Nombre LIKE  '%" & FormBuscarRol.tbxBuscarRol.Text & "%'" & ";", "Roles")
        End If

        For Each n As String In resultadoBusqueda
            'en el listbox muestro los datos que considero necesarios
            datosSinFormato = n.Split(CChar("-"))
            datosFormateados &= datosSinFormato(0) & " " & datosSinFormato(1)
            FormBuscarRol.ListBox1.Items.Add(datosFormateados)
            datosFormateados = "" 'limpio la cadena para no duplicar datos
        Next
        Return resultadoBusqueda
    End Function

    ''' <summary>
    ''' Subproceso que se encarga de validar si el usuario y la contraseña son correctos
    ''' y su es administrador o un operario.
    ''' </summary>
    ''' <param name="usuario"></param>
    ''' <param name="contraseña"></param>
    ''' <remarks></remarks>
    Public Sub validar(ByVal usuario As String, ByVal contraseña As String)
        Dim resultadoBusqueda = New List(Of String)
        Dim miUsuario As String = ""
        Dim miContraseña As String = ""
        Dim datosSinFormato() As String = New String(14) {}
        Dim _resultadoBusqueda = New List(Of String)
        Dim avisarIncorrectos As Boolean = True
        Dim miIdRol As Integer

        resultadoBusqueda = _miBD.Consultar("Select * from Usuarios", "Usuarios")

        For Each n As String In resultadoBusqueda
            'en en form buscar muestro los datos que considero necesarios
            datosSinFormato = n.Split(CChar("-"))
            miUsuario = datosSinFormato(4)
            miContraseña = datosSinFormato(5)
            miIdRol = CInt(datosSinFormato(8)) 'si es 1 administrador 2 operario

            If usuario = miUsuario And contraseña = miContraseña Then
                If miIdRol = 3 Then
                    FormEntrada.Show() 'muestro el formulario normal
                Else
                    FormEntrada.MenuGestion.Enabled = False
                    FormEntrada.Show() 'muestro el formulario limitado
                End If
                avisarIncorrectos = False
                FormValidar.Visible = False
            Else
                miUsuario = ""
                miContraseña = ""
            End If
        Next
        If avisarIncorrectos = True Then
            MsgBox("El usuario o contraseña son incorrectos.")
            FormValidar.tbxUsuario.Clear()
            FormValidar.tbxConstraseña.Clear()
        End If
    End Sub

    Public Function MostrarPartidosCampeonato() As List(Of String)
        Dim resultadoBusqueda = New List(Of String)
        MsgBox("aqui")
        resultadoBusqueda = _miBD.Consultar("Select * from Partidos where IdTorneo = " & FormEntrada.CampeonatoActivo & ";", "Partidos")
        MsgBox("despues")
        Return resultadoBusqueda
    End Function

    Public Function ComprobarTorneoGenerado(ByVal idTorneo As Integer) As Boolean
        Dim listaResultados As List(Of String) = New List(Of String)
        'select para obtener si en la tabla partidos ya existen registros con la id de ese torneo
        listaResultados = _miBD.Consultar("Select * from Partidos where IdTorneo = " & idTorneo & ";", "Partidos")
        If listaResultados.Count <= 0 Then
            Return False
        Else
            Return True
        End If
    End Function

End Class
